﻿#ifndef MYTABLEWIDGET_H
#define MYTABLEWIDGET_H

#include <QTableWidget>
#include <QTableWidgetItem>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QMouseEvent>
#include "mytabledata.h"
#include <QStandardItemModel>
#include <QStandardItem>
#include <QTreeWidgetItem>
#include "mytreewidget.h"
#include <QTimer>
#include <QScrollBar>
#include "DbCfgFun.h"
#include "MenuInfo.h"
#include <QStringList>
#include "mytabledata.h"

#define 	VIEW_MENU_PASTE				1					//粘贴
//	VIEW_MENU_CAPY				2					//拷贝


QT_BEGIN_NAMESPACE
class QObject;
QT_END_NAMESPACE

class MyTableWidget : public QTableWidget
{
	Q_OBJECT
public:
    MyTableWidget(MyTableData *pMyTableData, MyTreeWidget *pTreeWdgt, QWidget *parent = 0);
	~MyTableWidget();

public:
	void	ClearAllShowCont();
	/*	函数：	InitCurTreeItemDataShow
	用途：	初始化当前选中树ITEM数据显示
	输入：	int AppType, int TableId
	返回：	*/
	int	InitCurTreeItemDataShow(QTreeWidgetItem *pCurTreeItem,int PtlParamType);

	/*	函数：	InitTableDataByTableType
	用途：	初始化当前选中树ITEM数据显示
	输入：	
	返回：	*/
	int	InitTableDataByTableType();

	/*	函数：	InitDataShow
	用途：	初始化数据显示
	输入：	int AppType, int TableId
	返回：	*/
	int	InitDataShow(unsigned int AppType, unsigned int TableId, unsigned int ParentId, int PtlParamType);

	/*	函数：	InitTableDataShow
	用途：	刷新表数据显示（重新从数据内存中读取数据显示）
	输入：	
	返回：	*/
	int	RefrashTableData();

protected:
	/*	函数：	InitTableParamAndData
	用途：	初始化表表参数和数据
	输入：	int AppType, int TableId
	返回：	*/
	int	InitTableParam(unsigned int AppType, unsigned int TableId, unsigned int ParentId, int PtlParamType);

	/*	函数：	InitTableHead
	用途：	初始化表头显示
	输入：	int AppType, int TableId
	返回：	*/
	int	InitTableHead();

	/*	函数：	InitTableDataShow
	用途：	初始化表数据显示
	输入：	
	返回：	*/
	int	InitTableDataShow(bool bShowOldPage, int OldPageNo);

	int	ShowTableData(bool bShowOldPage, int OldPageNo);

	/*	函数：	SetVerticalHeadShow
	用途：	设置行标头显示
	输入：	
	返回：	*/
	int	SetVerticalHeadShow(int RowNo,  QTableWidgetItem *pVHeadItem, bool bDelFlag = false);

	/*	函数：	OneRowTableDataShow
	用途：	显示一条记录
	输入：	
	返回：	*/
	int	OneRowTableDataShow(int RowNo);



	/*	函数：	SetRowItemEditState
	用途：	设置记录的可编辑状态
	输入：	
	返回：	*/
	int	SetRowItemEditState(int RowNo, bool bEnableEdit);

	//	void	mousePressEvent(QMouseEvent * event );
	void	closeEvent(QCloseEvent *event);

	bool	CheckIsSetChangColorRecord(int RecordId);
	/*	函数：	OneFieldDataShow
	用途：	显示一条字段（修改字段显示）
	输入：	
	返回：	*/
	int	OneFieldDataShow(int RowNo, int FieldNo);

protected slots:
		void OnSynicUserDataChang(int RecordNo, int columnNo);
		
		/*	函数：	OnHScrollMove
		用途：	判断行选中
		输入：	
		返回：	*/
		void	OnHScrollMove(int moveValue);

		/*	函数：	OnRowSelectFlag
		用途：	判断行选中
		输入：	
		返回：	*/
		void	OnClickVHead(int RowNo);
		void	OnItemClick(QTableWidgetItem *item);
		/*	函数：	OnItemUserDataChang
		用途：	ITEM用户数据改变
		输入：	
		返回：	*/
		void	OnItemUserDataChang(int RecordNo, int columnNo);

		/*	函数：	OnAppendRow
		用途：	添加一条记录
		输入：	
		返回：	*/
		void	OnAppendRow();

		/*	函数：	OnSaveData
		用途：	数据保存消息
		输入：	
		返回：	*/
		void	OnSaveData();

		/*	函数：	OnDeleteData
		用途：	数据删除标志
		输入：	
		返回：	*/
		void	OnDeleteData();

		/*	函数：	OnRefreshData
		用途：	数据刷新
		输入：	
		返回：	*/
		void	OnRefreshData(); 

		/*	函数：	OnReSetDataShow
		用途：	重新设置数据显示 不删除ITEM
		输入：	
		返回：	*/
		void	OnReSetDataShow(int RecId1, int RecId2,int RecId3, int FieldNo); 

		/*	函数：	OnSetColValue
		用途：	设置列值
		输入：	
		返回：	*/
		void	OnSetColValue();

		/*	函数：	SelectChanged
		用途：	选择内容改变
		输入：	
		返回：	*/
		void	SelectChanged();

		/*	函数：	SaveDeviceModel
		用途：	将设备保存为模板
		输入：	
		返回：	*/
		void	SaveDeviceToModel();

		/*	函数：	SaveDevModelToFile
		用途：	将设备模板保存为文件
		输入：	
		返回：	*/
		void	SaveDevModelToFile();

		void	OnPageShow(int ActType, int PageNo);

		/*	函数：	OnGetDataFromCliboard
		用途：	从剪切板取数据
		输入：	
		返回：	 */
		void	OnGetDataFromCliboard();

		void	upDateMenu(QPoint point);

protected:
	void	mousePressEvent(QMouseEvent *event);

private:
	bool	bSaveData();
	void	CheckNeedSave(bool isPara);
	//建立右键菜单
	void	setupPopMenu();

signals:
//	void  UpTreeItem_Signal(quint32 AppType, quint32 TableId, quint32 ParentId, quint32 RecordId, QTreeWidgetItem	*pCurItem, int RowProp);
	void  SelectRow_Signal(int RowNum);
	void  SelectItem_Signal(int ItemRowNum, int ItemColNum, int ItemColIndex);			//选择行信号
	void	SaveData_Signal(bool bSave);

	void	PageNum_Signal(int PageNum);
	void	PageCurNo_Signal(int PageNo);
	void	ClickRow_Signal(int RowNo);
	void	Signal_UserDataChang(int RecordNo, int FieldNo);

private:
	bool			m_bModified;				//是否有修改标志
	unsigned int			m_CurAppType;
	unsigned int			m_CurTableId;
	unsigned int			m_CurParentId;
	int						m_CurPtlParamType;
	MyTableData		*m_pTableData;
	//MyTableData *pMyTableData
	QMenu			*m_RighMenu;
	QList<QAction *> m_PopAction_list;
	QTreeWidgetItem	*m_pCurTreeItem;
	int			m_LastSelRowNum;
	int			m_LastSelItemRowNum;
	int			m_LastSelItemColNum;
	bool			m_LastbSetColFlag;
	MyTreeWidget   *m_pTreeWdgt;
	QScrollBar		*m_pHorizontalScrollBar;	

	unsigned int				m_SetColorRecId1;
	unsigned int				m_SetColorRecId2;
	unsigned int				m_SetColorRecId3;
	int				m_SetColorRecFieldNo;

	int				m_CurSeltRowNo;
	int				m_CurSeltColumnNo;
private:

	QStringList			m_ParaList;
};

#endif // MYTABLEWIDGET_H
